A single graphical user interface (GUI), such as the main window of an email client, typically includes several user interface (UI) components. The components may include various menu bars, toolbars, folder trees, text boxes, etc. Most GUIs are monolithic in that all the components of a particular UI are built on the same UI technology and then compiled together as one single piece of code. The result is that the components of the UI are dependent on one another.
This dependency between UI components in a monolithic GUI creates difficulties from a maintenance perspective. For example, if a developer wishes to enhance the GUI by updating a UI component, the code for the GUI must be rewritten and recompiled. Similarly, adding or removing a UI component also requires that the code be rewritten and recompiled. In other words, monolithic GUIs are not pluggable with respect to UI components. Additionally, UI components in monolithic GUIs are not portable in the sense that a UI component of one monolithic GUI cannot be reused by another monolithic GUI that is built on a different UI technology. Moreover, even if a component UI is built on the same technology as another monolithic UI, the component UI may still not be reusable in the other monolithic UI due to a design difference in the component UI that makes it incompatible.
Thus, all the UI components of a monolithic UI need to be built on the same technology with the same fundamental design. Conventional GUI mechanisms do not allow gradation of UI controls without affecting other modules or UI components within the same GUI.